<template>
  <div class="wrapper app-container">
    <el-button type="primary" icon="el-icon-plus" @click="showAddDialog">添加</el-button>
    <el-table :data="trademarkList" style="width: 100%">
        <el-table-column label="序号" align="center"type="index" width="100"></el-table-column>
        <el-table-column label="品牌名称" prop="tmName"></el-table-column>
        <el-table-column label="品牌LOGO" prop="logoUrl">
          <template slot-scope="{row,$index}">
            <img :src="row.logoUrl" style="width:80px"/>
          </template>
        </el-table-column>
        <el-table-column label="操作" width="180" align="center">
            <template slot-scope="{row,$index}">
                <el-button
                size="mini"
                icon="el-icon-edit" type="warning" @click="showUpdateDialog(row)">编辑</el-button>
                <el-button
                size="mini"
                type="danger"
                icon="el-icon-delete" @click="deleteTrademark(row)">删除</el-button>
            </template>
        </el-table-column>
    </el-table>  
     <!--分页  -->
    <el-pagination style="text-align: center"
      @size-change="handleSizeChange"
      @current-change="getTrademarkList"
      :current-page="currentPage"
      :page-sizes="[3, 5, 7]"
      :page-size="3"
      layout="prev, pager, next, jumper,->,sizes,total"
      :pageCount="7"
      :total="total" background>
    </el-pagination>
    <!-- 对话框 -->
    <el-dialog :title="tmForm.id?'修改品牌':'添加品牌'" :visible.sync="dialogFormVisible">
        <el-form :model="tmForm" style="width:80%"  :rules="rules" ref="tmForm">
          <el-form-item label="品牌名称" :label-width="formLabelWidth" prop="tmName">
            <el-input v-model="tmForm.tmName" autocomplete="off"></el-input>
          </el-form-item>
          <el-form-item label="品牌LOGO" :label-width="formLabelWidth" prop="logoUrl"> 
            <el-upload
            class="avatar-uploader"
            action="/dev-api/admin/product/fileUpload/"
            :show-file-list="false"
            :on-success="handleAvatarSuccess"
            :before-upload="beforeAvatarUpload">
            <img v-if="tmForm.logoUrl" :src="tmForm.logoUrl" class="avatar">
            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
            </el-upload>
          </el-form-item>
        </el-form>  
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="addOrUpdate">确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>


<script>
  export default {
    name:"trademark",
    data() {
      var validateTmName = (rule,value,callback)=>{
        if(value.length<2 || value.length>10){
          return callback(new Error("长度必须是2-10"))
        }else{
          return callback() ; // 空回调
        }
      }
      return {
        trademarkList:[],
        currentPage:1,
        limit:3,
        total:0,
        tmForm:{
            tmName:"",
            logoUrl:'',
        },
        imageUrl:'',
        dialogFormVisible: false,
        formLabelWidth: '120px',
        rules: {
          tmName: [
            { required: true, message: '请输入品牌名称', trigger: 'blur' }, // 验证是否必填
            // { min: 2, max: 10, message: '长度在 3 到 5 个字符', trigger: 'change' } // 验证长度
            { validator:validateTmName, trigger :"change"}  // 使用自定义规则
          ],
          // 不能进行单向验证，必须使用整体验证
          logoUrl: [
            { required: true, message: '请选择上传图片', trigger: 'change' }
          ],
        }
      }
    },
    methods: {
      handleEdit(index, row) {
        console.log(index, row);
      },
      handleDelete(index, row) {
        console.log(index, row);
      },
      handleSizeChange(value){
        this.limit = value;
        this.getTrademarkList();
      },
      showAddDialog(){
        this.dialogFormVisible = true;
        // $data 表示现有的值，双向数据绑定后的内容， $options.data()是初始值。可用于初始化数据。
        // 一般不会 this.tmForm.tmName ="",这种写法

        delete this.$data.tmForm.id
        Object.assign(this.$data.tmForm,this.$options.data().tmForm)  // 添加品牌。 tmForm 拷贝初始数据，没有id
      },
      showUpdateDialog(row){
        // row 在实际项目中不会整体使用，row代表这一行的信息
        this.dialogFormVisible = true
        console.log(row)
       //  this.tmForm = row  // 这样写 tmForm里的数据与table 的row 一致，修改品牌名会修改tmform 里的值，也就会修改该row 的值。
       this.tmForm ={...row}  // 这里是 浅拷贝，拷贝了原有数据和id ，不影响原来的row 的数据。 这里都是基础数据，没有对象这种，所以拷贝的都是值。
      // 修改品牌。 tmForm 拷贝row，具备了id          
      },
      addOrUpdate(){
        // 表单的整体验证
        this.$refs["tmForm"].validate( async (valid) => {
          if (valid) {
            // alert('submit!'); 验证成功 
            // 获取到收集的tm信息后，二次整理数据，发送请求，重新渲染。
            let trademark = this.tmForm
            try{
              const result = await this.$api.trademark.addOrUpdate(trademark)
              if(result.code === 200){
                this.$message.success(trademark.id?"修改品牌成功":"上传品牌成功")
                this.dialogFormVisible = false;
                // 修改停留当前页,添加跳转第一页
                this.getTrademarkList(trademark.id? this.currentPage:1)
              }else{
                this.$message(trademark.id?"修改品牌失败":"上传品牌失败")
              }
            }catch(e){
               this.$message(trademark.id?"修改品牌失败":"上传品牌失败")
            }
          } else {
            this.$message.error('表单验证失败')
            return false;
          }
        });


      
       

      },

      deleteTrademark(row){
        this.$confirm(`你确定要删除${row.tmName}, 是否继续?`, '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(async () => {
          try{
            const {code} = await this.$api.trademark.delete(row.id)
            console.log(row.id)
            if(code == 200){
              this.$message({type: 'success',message: '删除成功!'});
              this.getTrademarkList(this.trademarkList.length>1 ? this.currentPage:this.currentPage-1)
            }
          }catch(e){
              this.$message({
              type: 'info',
              message: '删除失败'
            }); 
          }
        }).catch(() => {
          this.$message({
            type: 'info',
            message: '已取消删除'
          });          
        });
      },

      async getTrademarkList(page = 1){
        this.currentPage = page;
        const result= await this.$api.trademark.getPageList(this.currentPage,this.limit)
        if(result.code === 200){
          this.trademarkList = result.data.records;
          this.total = result.data.total
        }
      },
        handleAvatarSuccess(res, file) {
        this.imageUrl = URL.createObjectURL(file.raw);  // 经过包装的虚假地址。
        this.tmForm.logoUrl = res.data // 真实的图片地址放在返回回调的res中，data
      },
      beforeAvatarUpload(file) {
        const isJPG = file.type === 'image/jpeg';
        const isLt2M = file.size / 1024 / 1024 < 2;

        if (!isJPG) {
          this.$message.error('上传头像图片只能是 JPG 格式!');
        }
        if (!isLt2M) {
          this.$message.error('上传头像图片大小不能超过 2MB!');
        }
        return isJPG && isLt2M;
      }
    },
    async mounted(){
      await this.getTrademarkList()
    }
  }
</script>

<style lang="scss" scoped>
::v-deep .avatar-uploader .el-upload {
    border: 1px dashed #d9d9d9;
    border-radius: 6px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
  }
 ::v-deep .avatar-uploader .el-upload:hover {
    border-color: #409EFF;
  }
  ::v-deep .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;
  }
  ::v-deep .avatar {
    width: 178px;
    height: 178px;
    display: block;
  }
</style>